//package com.yunhe.device.service.device.impl;
//
//import com.yunhe.common.model.PageParam;
//import com.yunhe.device.domain.device.ConnectivityDevice;
//import com.yunhe.device.domain.device.ConnectivityNode;
//import com.yunhe.common.exception.ArgumentErrorException;
//import com.yunhe.common.exception.ObjectNotFoundException;
//import com.yunhe.common.exception.UniqueConstraintsException;
//import com.yunhe.device.repository.device.ConnectivityDeviceRepository;
//import com.yunhe.device.repository.device.ConnectivityNodeRepository;
//import com.yunhe.device.service.device.ConnectivityDeviceService;
//import com.yunhe.common.util.QueryUtil;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.domain.Sort;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import java.util.List;
//import java.util.Optional;
//
///**
// * 连接设备Service
// * @desc 连接设备服务类实现
// * @author liuronglei
// */
//@Service
//public class ConnectivityDeviceServiceImpl implements ConnectivityDeviceService {
//    @Autowired
//    private ConnectivityDeviceRepository connectivityDeviceRepository;
//    @Autowired
//    private ConnectivityNodeRepository connectivityNodeRepository;
//
//    /**
//     * 设置起始节点
//     * @param connectivityDevice 连接设备对象
//     */
//    private void setStartEndNode(ConnectivityDevice connectivityDevice) {
//        ConnectivityNode startNode = connectivityDevice.getStartNode();
//        ConnectivityNode endNode = connectivityDevice.getEndNode();
//        if (startNode != null && endNode != null) {
//            if (startNode.getId() != null) {
//                startNode = connectivityNodeRepository.findById(startNode.getId()).orElse(null);
//            } else if (startNode.getCode() != null) {
//                startNode = connectivityNodeRepository.findByCode(startNode.getCode());
//            }
//            if (endNode.getId() != null) {
//                endNode = connectivityNodeRepository.findById(endNode.getId()).orElse(null);
//            } else if (startNode.getCode() != null) {
//                endNode = connectivityNodeRepository.findByCode(endNode.getCode());
//            }
//            connectivityDevice.setStartNode(startNode);
//            connectivityDevice.setEndNode(endNode);
//        }
//    }
//
//    /**
//     * 开关对象处理和判断
//     * @param connectivityDevice 开关对象
//     */
//    private void processBeforeSave(ConnectivityDevice connectivityDevice)
//            throws ArgumentErrorException, UniqueConstraintsException {
//        //判断代码是否为空
//        if (connectivityDevice.getCode() == null) {
//            throw new ArgumentErrorException("代码不能为空");
//        }
//        //判断代码是否已存在
//        ConnectivityDevice connectivityDeviceByCode = this.findByCode(connectivityDevice.getCode());
//        if (connectivityDeviceByCode != null) {
//            if (connectivityDevice.getId() == null || connectivityDeviceByCode.getId().longValue() != connectivityDevice.getId().longValue()) {
//                throw new UniqueConstraintsException("该代码已存在");
//            }
//        }
//        //设置起始节点
//        setStartEndNode(connectivityDevice);
//    }
//
//    /**
//     * 新增连接设备
//     * @param connectivityDevice 新增对象
//     */
//    @Override
//    @Transactional
//    public ConnectivityDevice createConnectivityDevice(ConnectivityDevice connectivityDevice)
//            throws ArgumentErrorException, UniqueConstraintsException {
//        connectivityDevice.setId(null);
//        processBeforeSave(connectivityDevice);
//        //设置基础电压（因为开关本身是关系，所以不能再指向别的节点，暂时注释掉）
//        /*
//        if (connectivityDevice.getBaseVoltageId() != null) {
//            connectivityDevice.setBaseVoltage(baseVoltageService.findByBaseVoltageId(connectivityDevice.getBaseVoltageId()));
//        }
//        */
//        return connectivityDeviceRepository.save(connectivityDevice);
//    }
//
//    /**
//     * 批量新增连接设备
//     * @param list 连接设备列表
//     */
//    @Override
//    @Transactional
//    public Iterable<ConnectivityDevice> createConnectivityDevice(List<ConnectivityDevice> list)
//            throws ArgumentErrorException, UniqueConstraintsException {
//        for (ConnectivityDevice connectivityDevice : list) {
//            connectivityDevice.setId(null);
//            processBeforeSave(connectivityDevice);
//        }
//        return connectivityDeviceRepository.saveAll(list);
//    }
//
//    /**
//     * 根据id删除连接设备
//     * @param connectivityDeviceId id
//     */
//    @Override
//    @Transactional
//    public void deleteConnectivityDevice(Long connectivityDeviceId) {
//        connectivityDeviceRepository.deleteById(connectivityDeviceId);
//    }
//
//    /**
//     * 根据代码删除连接设备
//     * @param code 代码
//     */
//    @Override
//    @Transactional
//    public Long deleteConnectivityDeviceByCode(Long code) {
//        return connectivityDeviceRepository.deleteByCode(code);
//    }
//
//    /**
//     * 更新连接设备（更新全部字段）
//     * @param connectivityDevice 要更新的连接设备对象
//     */
//    @Override
//    @Transactional
//    public ConnectivityDevice updateConnectivityDevice(ConnectivityDevice connectivityDevice)
//            throws ArgumentErrorException, UniqueConstraintsException, ObjectNotFoundException {
//        boolean exists = connectivityDevice.getId() != null && connectivityDeviceRepository.existsById(connectivityDevice.getId());
//        if (!exists) {
//            throw new ObjectNotFoundException("找不到ID为" + connectivityDevice.getId() + "的开关");
//        }
//        processBeforeSave(connectivityDevice);
//        return connectivityDeviceRepository.save(connectivityDevice);
//    }
//
//    /**
//     * 更新连接设备（更新指定字段）
//     * @param connectivityDeviceId id
//     * @param type 连接设备类型：Breaker、Disconnector
//     * @param code 代码
//     * @param name 名称
//     * @param baseVoltageId 基础电压ID
//     * @param iNode I节点
//     * @param jNode J节点
//     * @param substation 变电站ID
//     * @param terminalId 端子ID
//     * @param pathName 路径名
//     * @param breakerType 开关类型
//     * @param startNodeCode 开始节点代码
//     * @param endNodeCode 结束节点代码
//     */
//    @Transactional
//    public ConnectivityDevice updateConnectivityDevice(Long connectivityDeviceId,
//                                                       String type,
//                                                       Long code,
//                                                       String name,
//                                                       Long baseVoltageId,
//                                                       Long iNode,
//                                                       Long jNode,
//                                                       Long substation,
//                                                       List<Long> terminalId,
//                                                       String pathName,
//                                                       String breakerType,
//                                                       Long startNodeCode,
//                                                       Long endNodeCode)
//            throws ArgumentErrorException, ObjectNotFoundException, UniqueConstraintsException {
//        ConnectivityDevice connectivityDevice = this.findByConnectivityDeviceId(connectivityDeviceId);
//        if (connectivityDevice == null) {
//            throw new ObjectNotFoundException("找不到ID为" + connectivityDeviceId + "的开关");
//        }
//        connectivityDevice.setType(type);
//        Optional.ofNullable(code).ifPresent(connectivityDevice::setCode);
//        Optional.ofNullable(name).ifPresent(connectivityDevice::setName);
//        Optional.ofNullable(iNode).ifPresent(connectivityDevice::setiNode);
//        Optional.ofNullable(jNode).ifPresent(connectivityDevice::setjNode);
//        Optional.ofNullable(substation).ifPresent(connectivityDevice::setSubstation);
//        Optional.ofNullable(terminalId).ifPresent(connectivityDevice::setTerminalId);
//        Optional.ofNullable(pathName).ifPresent(connectivityDevice::setPathName);
//        Optional.ofNullable(baseVoltageId).ifPresent(connectivityDevice::setBaseVoltageId);
//        Optional.ofNullable(breakerType).ifPresent(connectivityDevice::setBreakerType);
//        if (startNodeCode != null) {
//            ConnectivityNode startNode = new ConnectivityNode();
//            startNode.setCode(startNodeCode);
//            connectivityDevice.setStartNode(startNode);
//        }
//        if (endNodeCode != null) {
//            ConnectivityNode endNode = new ConnectivityNode();
//            endNode.setCode(endNodeCode);
//            connectivityDevice.setEndNode(endNode);
//        }
//        processBeforeSave(connectivityDevice);
//        return connectivityDeviceRepository.save(connectivityDevice);
//    }
//
//    /**
//     * 根据ID获得连接设备对象
//     * @param id id
//     */
//    @Override
//    public ConnectivityDevice findByConnectivityDeviceId(Long id) {
//        return connectivityDeviceRepository.findById(id).orElse(null);
//    }
//
//    /**
//     * 根据代码获得连接设备对象
//     * @param code 代码
//     */
//    @Override
//    public ConnectivityDevice findByCode(Long code) {
//        return connectivityDeviceRepository.findByCode(code);
//    }
//
//    /**
//     * 获得所有连接设备对象
//     * @param type 连接设备类型：Breaker、Disconnector
//     * @param pageParam 分页对象
//     */
//    @Override
//    public Iterable<ConnectivityDevice> findConnectivityDevicesByType(String type, PageParam pageParam) {
//        Iterable<ConnectivityDevice> results;
//        if (QueryUtil.needPaging(pageParam)) {
//            results = connectivityDeviceRepository.findByType(type, QueryUtil.getPageRequest(pageParam));
//        } else {
//            Sort sort = pageParam == null ? null : QueryUtil.getSort(pageParam.getSort());
//            if (sort != null) {
//                results = connectivityDeviceRepository.findByType(type, sort);
//            } else {
//                results = connectivityDeviceRepository.findByType(type);
//            }
//        }
//        return results;
//    }
//
//}
